ลองใช้งาน sample applications สำหรับตอบคำถามตามข้อมูล User Guide ของ AWS ล่าสุดด้วย Amazon Kendra และ OpenAI
ไปเจอข้อมูลเกี่ยวกับแอปพลิเคชันแชทตัวอย่างที่ใช้ Amazon Kendra และ OpenAI เพื่อให้คำตอบตาม User Guide ของ AWS ล่าสุดที่ AWS Samples ลงไว้เลยอยากเอามาลองทดสอบให้เพื่อนๆได้ดูกันครับ
นี่คือหน้าจอแชทที่ได้ลองใช้จริง โดยได้ถามไปว่า Amazon Kendra รองรับเอกสารประเภทใดบ้าง และระบบได้ตอบ กลับพร้อมกับ URL ของ User Guide ที่อ้างอิงมาด้วย
sample applications จะอยู่ใน repository ดังต่อไปนี้
โดยนอกจาก OpenAI แล้วยังรองรับ AI อื่นๆดังต่อไปนี้ด้วย
- Hugging Face
- AI21 Labs
- Cohere
- Anthropic
- OpneAI
นอกจากนี้ยังมีบล็อกของ AWS ที่แนะนำวิธีใช้ sample นี้ด้วย โดยจะอ้างอิงข้อมูลบางส่วนจากบล็อกนี้และลองทดสอบสร้างแอปพลิเคชันครับ
ก่อนอื่นมาทำความเข้าใจกับโครงสร้างของแอปพลิเคชันตัวอย่างก่อนที่จะลองสร้างกันครับ
แผนผังโครงสร้าง
แผนผังโครงสร้าง sample applications ที่สร้างขึ้นในบล็อกนี้จะอ้างอิงมาจากบล็อกของ AWS ครับ
เมื่อผู้ใช้ถามคำถามผ่านการแชท แอปพลิเคชันจะเข้าถึง Amazon Kendra ซึ่งได้นำเข้าข้อมูลจาก User Guide ของ AWS และส่งคำตอบไปยัง OpenAI เพื่อสร้างคำตอบให้กับผู้ใช้
การสร้าง sample applications
มาลองสร้าง sample applications กันครับ
โดยเวอร์ชันซอฟต์แวร์ที่ใช้ในครั้งนี้มีดังนี้
- Python 3.9.16
- boto3 1.26.130
- Streamlit 1.22.0
- openai 0.27.6
- langchain 0.0.163
และจะใช้ AWS Cloud9 เป็นสภาพแวดล้อมในการรันแอปพลิเคชัน ซึ่งการตั้งค่าหลักๆจะมีดังนี้
- instance size t2.micro
- Platform Amazon Linux 2
การสร้าง Amazon Kendra
ในครั้งนี้เราจะใช้ Template ของ CloudFormation ในลิ้งค์ด้านล่างในการทดสอบครับ
หลังจากอัปโหลด Template ข้างต้นไปยัง AWS CloudShell แล้ว ให้รันคำสั่งต่อไปนี้
aws cloudformation create-stack \ --region ap-southeast-1 \ --stack-name demo-kendora \ --template-body file://kendra-docs-index.yaml \ --capabilities CAPABILITY_NAMED_IAM
โดยในการสร้างสภาพแวดล้อมจะใช้เวลาประมาณ 45 นาที
เมื่อการติดตั้งเสร็จสิ้นแล้ว ระบบจะสร้าง IAM Role ที่เกี่ยวข้องกับ Lambda ที่มีการซิงโครไนซ์กับ data source และ index ของ Kendra ขึ้นมา
โดยประเภท data source ของ Kendra จะเป็น WebCrawler connector
ซึ่งจะรวบรวมข้อมูลจาก 3 User Guide ของ AWS ดังต่อไปนี้
https://docs.aws.amazon.com/sagemaker/latest/dg/sitemap.xml https://docs.aws.amazon.com/lex/latest/dg/sitemap.xml https://docs.aws.amazon.com/kendra/latest/dg/sitemap.xml
สำหรับการซิงโครไนซ์ จะมีข้อมูลบางส่วนขึ้นเครื่องหมายว่า Failed
แต่ก็มีข้อมูลไม่น้อยที่เป็น Added
กำหนดการซิงโครไนซ์กับ data source จะถูกตั้งค่าเป็น Run on Demand
ซึ่งจะไม่ได้ดำเนินการซิงโครไนซ์เป็นประจำ และการกำหนดค่านี้จำเป็นต้องทำการซิงโครไนซ์ด้วยตนเอง จึงใช้ AWS Lambda เพื่อทำการซิงโครไนซ์ โดยส่วนตัวคิดว่าน่าจะพยายามหลีกเลี่ยงการรวบรวมข้อมูลของเว็บโดยไม่จำเป็น
อย่างไรก็ตาม ตามที่ระบุไว้ในบล็อกของ AWS การขอเพิ่มโควตาของ Amazon Kendora จะช่วยเพิ่มประสบการณ์การใช้งานให้ดีขึ้นได้ แต่ในครั้งนี้เราจะไม่ดำเนินการใดๆ
การสร้าง Web applications
เราจะสร้าง sample Web applications บน AWS Cloud9
Python
บล็อกของ AWS ระบุว่าให้ใช้งานตั้งแต่ Python 3.9 หรือใหม่กว่าในการทดสอบครับ
$ python --version Python 3.8.16
สามารถตรวจสอบเกี่ยวกับเปลี่ยนเวอร์ชันของ Python บน Cloud9 ได้ผ่านบล็อกต่อไปนี้
จากนั้นทำการติดตั้ง pyenv.
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ ~/.pyenv/bin/pyenv --version
pyenv 2.3.36
$ cat <> ~/.bashrc
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
EOT
$ source ~/.bashrc
$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
ติดตั้ง Python 3.9.16 และทำการเปลี่ยนเวอร์ชัน
$ sudo yum -y update $ sudo yum -y install bzip2-devel $ sudo yum -y install xz-devel $ pyenv install 3.9.16 $ pyenv versions * system (set by /home/ec2-user/.pyenv/version) 3.9.16 $ pyenv global 3.9.16 $ pyenv versions system * 3.9.16 (set by /home/ec2-user/.pyenv/version) $ python --version Python 3.9.16
boto3
ติดตั้ง AWS SDK for Python (Boto3)
โดยติดตั้งตามขั้นตอนในลิ้งค์ทางด้านล่าง
จากนั้นทำการอัปเกรด pip
$ /home/ec2-user/.pyenv/versions/3.9.16/bin/python3.9 -m pip install --upgrade pip
ติดตั้ง Boto3
$ pip3 install boto3 $ pip3 list | grep boto3 boto3 1.34.42
Streamlit
ติดตั้ง Streamlit สำหรับสร้าง Web applications ด้วย Python
ติดตั้งตามขั้นตอนในลิ้งค์ทางด้านล่าง
$ pip3 install streamlit $ streamlit --version Streamlit, version 1.31.1
และตรวจสอบว่าสามารถดูเว็บไซต์ได้ผ่านคอมพิวเตอร์ได้หรือไม่
$ streamlit hello --server.port 8080
หลังจากรันคำสั่งข้างต้นแล้ว ให้เลือก Preview → Preview Running Application ใน AWS Cloud9 ก็จะสามารถดูข้อมูลได้ตามภาพครับ
โดยก่อนดูรายละเอียดผ่าน Preview ให้ตรวจสอบอีกครั้งว่า inbound ของ security group มีการอนุญาต Port 8080 แล้วหรือไม่ แล้วค่อยเข้า Browser ครับ
โดยสามารถ กด CTRL+C
พร้อมกันเพื่อทำหยุดการใช้งาน streamlit ได้ครับ
อนึ่ง Streamlit จะรวบรวมสถิติการใช้งานเมื่อทำการติดตั้ง หากไม่ต้องการเก็บข้อมูลเหล่านั้น สามารถเพิ่มเนื้อหาดังต่อไปนี้ลงในไฟล์การตั้งค่าได้
[browser] gatherUsageStats = false
ถ้าไม่มีไฟล์ตั้งค่า สามารถใช้คำสั่งต่อไปนี้เพื่อสร้างได้
$ mkdir ~/.streamlit
$ vi ~/.streamlit/config.toml
ในการตั้งค่ายกเลิกการรวบรวมสถิติการใช้งานสามารถตรวจสอบได้จากลิ้งก์ต่อไปนี้
Configuration - Streamlit Docs
OpenAI, LangChain
ติดตั้ง LangChain ตามลิ้งก์ทางด้านล่าง
จากนั้นติดตั้ง OpenAI โดยจะตั้งค่า API key ของตัวแปรในสภาพแวดล้อมในภายหลัง
$ pip3 install openai $ openai --version openai 1.12.0
ติดตั้ง LangChain
$ pip3 install langchain $ pip3 list | grep langchain langchain 0.1.7
sample applications
ให้รันคำสั่งดังต่อไปนี้
$ pwd /home/ec2-user $ git clone https://github.com/aws-samples/amazon-kendra-langchain-extensions.git $ cd amazon-kendra-langchain-extensions/kendra_retriever_samples/ $ rm requirements.txt $ cat << EOF > requirements.txt anthropic==0.16.0 streamlit==1.31.1 langchain==0.1.7 openai==1.12.0 EOF $ pip3 install -r requirements.txt
ตั้งค่าตัวแปรสภาพแวดล้อม
$ export AWS_REGION="ap-southeast-1" $ export KENDRA_INDEX_ID="dd6d896b-704e-46f9-9ab6-5adffexample" $ export OPENAI_API_KEY="..."
REGION
จะเป็นการระบุ REGION ที่ใช้งาน Amazon Kendra อยู่ โดยในกรณีนี้จะหมายถึง REGION ที่จะสร้าง stack ของ CloudFormation ที่สร้าง Amazon Kendra ขึ้นมา
KENDRA_INDEX_ID
จะเป็นการระบุ ID ของ index ใน Amazon Kendra ซึ่งสามารถตรวจสอบได้จากหน้า Management console หรือคำสั่งต่อไปนี้
$ aws kendra list-indices
{
"IndexConfigurationSummaryItems": [
{
"Status": "ACTIVE",
"Name": "demo-kendora-Index",
"Edition": "DEVELOPER_EDITION",
"UpdatedAt": 1683642249.785,
"Id": "dd6d896b-704e-46f9-9ab6-5adffexample",
"CreatedAt": 1683642249.785
}
]
}
OPENAI_API_KEY
จะเป็นการระบุ API KEY ของ OpenAI ของแต่ละท่าน
โดยการดึงข้อมูล OPENAI_API_KEY ให้สร้าง account จากเมนู Get Started จากลิ้งค์ดังต่อไปนี้
- https://openai.com/product
จากนั้นให้ไปที่เมนูUsage
ตามภาพถ้าสถานะเป็น Available
ก็จะสามารถใช้งานได้ในวงเงินไม่เกิน 5.00$ ภายในระยะเวลาที่กำหนดครับ
แต่ถ้าเป็นสถานะด้านล่างจะแสดงเป็น Expired
หมายความว่าหมดอายุการใช้งานฟรีแล้ว
จากนั้นไปที่เมนู API Key
ทางด้านซ้ายแล้วสร้าง KEY ที่ปุ่ม Create new secret key
ก็จะได้ API KEY มาใช้ได้ครับ
ระบุ API KEY แล้วก็มาลองรัน sample applications กันเลย
$ cd /home/ec2-user/amazon-kendra-langchain-extensions/kendra_retriever_samples/
$ streamlit run app.py openai --server.port 8080
จากนั้นเลือกไปที่ Preview → Preview Running Applicaiton ใน AWS Cloud9 แล้วก็จะสามารถค้นหาข้อมูลได้
ที่เหลือก็แค่ลองใช้งานการสอบถามเท่านั้น
ตรวจสอบการใช้งาน
เนื่องจาก Amazon Kendra มีการรวบรวม User Guide บริการของ AWS ไว้อยู่ เลยจะลองถามคำถามที่เกี่ยวข้องดู
- Amazon Lex
- Amazon SageMaker
- Amazon Kendra
ลองถามเกี่ยวกับเอกสารทุกประเภทที่ Amazon Kendra รองรับ
what are all document types supported by amazon kendra
จากข้อมูลที่แสดงขึ้นจากลิ้งค์ที่ 1 เป็นข้อมูลที่ต้องการค้นหา
- HTML files
- Microsoft PowerPoint (PPT) presentations
- MS WORD documents
- Plain text documents
- PDFs
- Comma Separated Values (CSV) files
- Microsoft Excel (MS EXCEL) files
- XML files
- JSON files
- Markdown Documentation (MD) files
- Rich Text Format (RTF) files
- Extensible Stylesheet Language Transformation (XSLT) files
เอกสารอ้างอิง:Types of documents - Amazon Kendra
นอกจากนี้ยังได้ลองสอบถามคำถามอื่นๆเพิ่มเติมดังนี้
what are all document types supported by kendra Does kendra support the JSON document type?
what is amazon lex?
what is amazon sagemaker?
which services are related to machine learning search?
how is amazon sagemaker differenct from amazon kendra?
และขอจบการทดลองใช้ sample applications เพียงเท่านี้ครับ
(ข้อมูลเพิ่มเติม) ราคา Amazon Kendra
สามารถตรวจสอบราคา Amazon Kendra ได้ในลิ้งก์ต่อไปนี้
การสร้าง INDEX ด้วย Developer Edition มีค่าบริการ 1.125 USD/ชั่วโมง
ซึ่งจะเท่ากับ 27 USD/วัน
(24 ชั่วโมง) นอกจากนี้ยังมีค่าบริการเพิ่มเติมสำหรับการซิงค์กับ connector และการสแกนเอกสารอีกด้วย
แนะนำว่าให้ตรวจสอบราคากันก่อนทำการทดสอบด้วยนะครับ
บทความที่เกี่ยวข้อง
- Amazon Kendra คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS | DevelopersIO | DevelopersIO
- เปิดตัว GPT-4 การพัฒนาของ AI ตัวใหม่จาก OpenAI | DevelopersIO